package com.chenxin.wms.service.impl;

import com.chenxin.common.utils.DateUtils;
import com.chenxin.wms.domain.ModuleSerial;
import com.chenxin.wms.mapper.ModuleSerialMapper;
import com.chenxin.wms.service.IModuleSerialService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 自生成序号Service业务层处理
 *
 * @author gry
 * @date 2025-04-12
 */
@Service
public class ModuleSerialServiceImpl implements IModuleSerialService {
    @Autowired
    private ModuleSerialMapper moduleSerialMapper;

    /**
     * 查询自生成序号
     *
     * @param serialId 自生成序号主键
     * @return 自生成序号
     */
    @Override
    public ModuleSerial selectModuleSerialBySerialId(Long serialId) {
        return moduleSerialMapper.selectModuleSerialBySerialId(serialId);
    }

    @Override
    public ModuleSerial selectModuleSerialByCode(String code) {
        return moduleSerialMapper.selectModuleSerialByCode(code);
    }

    /**
     * 查询自生成序号列表
     *
     * @param moduleSerial 自生成序号
     * @return 自生成序号
     */
    @Override
    public List<ModuleSerial> selectModuleSerialList(ModuleSerial moduleSerial) {
        return moduleSerialMapper.selectModuleSerialList(moduleSerial);
    }

    @Override
    public String getSerialNo(ModuleSerial moduleSerial) {
        String prefix = moduleSerial.getPrefixFlag();
        String dataFormat = moduleSerial.getDataFormat();
        int len = moduleSerial.getSerialLength();
        int number = moduleSerial.getCurrentNumber();
        int maxNum = moduleSerial.getMaxNumber();
        // 获取日期部分
        String dateStr = DateUtils.dateTimeNow(dataFormat);
        // 获取序号
        String serialNo = String.format("%0" + len + "d", number);
        // 判断序号是否达到最大值，如果达到则重置为0
        if (number + 1 >= maxNum) {
            number = 0;
        }
        // 更新数据库当前序号
        moduleSerial.setCurrentNumber(number + 1);
        //int row = moduleSerialMapper.updateModuleSerial(moduleSerial);
        //if (row == 0) {
        //    throw new WmsException("Serial_002", "自增序号更新失败!");
        //}
        // 将上述信息拼装为对应编码
        return prefix + dateStr + serialNo;
    }
}
